home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / shells / tcshsrc.zoo / tcsh / ed.defns.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-25  |  36.0 KB  |  1,320 lines

  1. /* $Header: /home/hyperion/mu/christos/src/sys/tcsh-6.00/RCS/ed.defns.c,v 3.1 1991/07/15 19:37:24 christos Exp $ */
  2. /*
  3.  * ed.defns.c: Editor function definitions and initialization
  4.  */
  5. /*-
  6.  * Copyright (c) 1980, 1991 The Regents of the University of California.
  7.  * All rights reserved.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in the
  16.  *    documentation and/or other materials provided with the distribution.
  17.  * 3. All advertising materials mentioning features or use of this software
  18.  *    must display the following acknowledgement:
  19.  *    This product includes software developed by the University of
  20.  *    California, Berkeley and its contributors.
  21.  * 4. Neither the name of the University nor the names of its contributors
  22.  *    may be used to endorse or promote products derived from this software
  23.  *    without specific prior written permission.
  24.  *
  25.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  26.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  29.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  30.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  31.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  32.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  34.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  35.  * SUCH DAMAGE.
  36.  */
  37. #include "config.h"
  38. RCSID("$Id: ed.defns.c,v 3.1 1991/07/15 19:37:24 christos Exp $")
  39.  
  40. #include "sh.h"
  41. #include "ed.h"
  42.  
  43. static    void        ed_InitMetaBindings     __P((void));
  44.  
  45. PFCmd   CcFuncTbl[] = {        /* table of available commands */
  46.     e_unassigned,
  47. /* no #define here -- this is a dummy to detect initing of the key map */
  48.     e_unassigned,
  49. #define        F_UNASSIGNED    1
  50.     e_insert,
  51. #define        F_INSERT    2
  52.     e_newline,
  53. #define        F_NEWLINE    3
  54.     e_delprev,
  55. #define        F_DELPREV    4
  56.     e_delnext,
  57. #define        F_DELNEXT    5
  58.     e_toend,
  59. #define        F_TOEND        6
  60.     e_tobeg,
  61. #define        F_TOBEG        7
  62.     e_charback,
  63. #define        F_CHARBACK    8
  64.     e_charfwd,
  65. #define        F_CHARFWD    9
  66.     e_quote,
  67. #define        F_QUOTE        10
  68.     e_startover,
  69. #define        F_STARTOVER    11
  70.     e_redisp,
  71. #define        F_REDISP    12
  72.     e_tty_int,
  73. #define        F_TTY_INT    13
  74.     e_wordback,
  75. #define        F_WORDBACK    14
  76.     e_wordfwd,
  77. #define        F_WORDFWD    15
  78.     e_cleardisp,
  79. #define        F_CLEARDISP    16
  80.     e_complete,
  81. #define        F_COMPLETE    17
  82.     e_correct,
  83. #define        F_CORRECT    18
  84.     e_up_hist,
  85. #define        F_UP_HIST    19
  86.     e_down_hist,
  87. #define        F_DOWN_HIST    20
  88.     e_up_search_hist,
  89. #define        F_UP_SEARCH_HIST    21
  90.     e_down_search_hist,
  91. #define        F_DOWN_SEARCH_HIST    22
  92.     e_helpme,
  93. #define        F_HELPME    23
  94.     e_list_choices,
  95. #define        F_LIST_CHOICES    24
  96.     e_delwordprev,
  97. #define        F_DELWORDPREV    25
  98.     e_delwordnext,
  99. #define        F_DELWORDNEXT    26
  100.     e_digit,
  101. #define        F_DIGIT        27
  102.     e_killend,
  103. #define        F_KILLEND    28
  104.     e_killbeg,
  105. #define        F_KILLBEG    29
  106.     e_metanext,
  107. #define        F_METANEXT    30
  108.     e_send_eof,
  109. #define        F_SEND_EOF    31
  110.     e_charswitch,
  111. #define        F_CHARSWITCH    32
  112.     e_which,
  113. #define        F_WHICH        33
  114.     e_yank_kill,
  115. #define        F_YANK_KILL    34
  116.     e_tty_dsusp,
  117. #define        F_TTY_DSUSP    35
  118.     e_tty_flusho,
  119. #define        F_TTY_FLUSHO    36
  120.     e_tty_quit,
  121. #define        F_TTY_QUIT    37
  122.     e_tty_tsusp,
  123. #define        F_TTY_TSUSP    38
  124.     e_tty_stopo,
  125. #define        F_TTY_STOPO    39
  126.     e_tty_starto,
  127. #define        F_TTY_STARTO    40
  128.     e_argfour,
  129. #define        F_ARGFOUR    41
  130.     e_set_mark,
  131. #define        F_SET_MARK    42
  132.     e_exchange_mark,
  133. #define        F_EXCHANGE_MARK    43
  134.     e_last_item,
  135. #define        F_LAST_ITEM    44
  136.     e_list_delnext,
  137. #define        F_LIST_DELNEXT    45
  138.     v_cmd_mode,
  139. #define        V_CMD_MODE    46
  140.     v_insert,
  141. #define        V_INSERT    47
  142.     e_argdigit,
  143. #define        F_ARGDIGIT    48
  144.     e_killregion,
  145. #define        F_KILLREGION    49
  146.     e_copyregion,
  147. #define        F_COPYREGION    50
  148.     e_gcharswitch,
  149. #define        F_GCHARSWITCH    51
  150.     e_run_fg_editor,
  151. #define        F_RUN_FG_EDITOR    52
  152.     e_unassigned,    /* place holder for sequence lead in character */
  153. #define        F_XKEY        53
  154.     e_uppercase,
  155. #define         F_CASEUPPER     54
  156.     e_lowercase,
  157. #define         F_CASELOWER     55
  158.     e_capitolcase,
  159. #define         F_CASECAPITAL   56
  160.     v_zero,
  161. #define        V_ZERO        57
  162.     v_add,
  163. #define        V_ADD        58
  164.     v_addend,
  165. #define        V_ADDEND    59
  166.     v_wordbegnext,
  167. #define        V_WORDBEGNEXT    60
  168.     e_killall,
  169. #define        F_KILLALL    61
  170.     e_unassigned,
  171. /* F_EXTENDNEXT removed */
  172.     v_insbeg,
  173. #define        V_INSBEG    63
  174.     v_replmode,
  175. #define        V_REPLMODE    64
  176.     v_replone,
  177. #define        V_REPLONE    65
  178.     v_substline,
  179. #define        V_SUBSTLINE    66
  180.     v_substchar,
  181. #define        V_SUBSTCHAR    67
  182.     v_chgtoend,
  183. #define        V_CHGTOEND    68
  184.     e_list_eof,
  185. #define        F_LIST_EOF    69
  186.     e_list_glob,
  187. #define        F_LIST_GLOB    70
  188.     e_expand_history,
  189. #define        F_EXPAND_HISTORY    71
  190.     e_magic_space,
  191. #define        F_MAGIC_SPACE    72
  192.     e_insovr,
  193. #define        F_INSOVR    73
  194.     v_cm_complete,
  195. #define        V_CM_COMPLETE    74
  196.     e_copyprev,
  197. #define        F_COPYPREV    75
  198.     e_correctl,
  199. #define        F_CORRECT_L    76
  200.     e_expand_glob,
  201. #define        F_EXPAND_GLOB    77
  202.     e_expand_vars,
  203. #define        F_EXPAND_VARS    78
  204.     e_toggle_hist,
  205. #define        F_TOGGLE_HIST    79
  206.     v_change_case,
  207. #define        V_CHGCASE    80
  208.     e_expand,
  209. #define        F_EXPAND    81
  210.     e_load_average,
  211. #define        F_LOAD_AVERAGE    82
  212.     0                /* DUMMY VALUE */
  213. #define        F_NUM_FNS    83
  214. };
  215.  
  216. KEYCMD  NumFuns = F_NUM_FNS;
  217.  
  218. KEYCMD  CcKeyMap[256];        /* the real key map */
  219. KEYCMD  CcAltMap[256];        /* the alternative key map */
  220.  
  221. KEYCMD  CcEmacsMap[] = {
  222. /* keymap table, each index into above tbl; should be 256*sizeof(KEYCMD)
  223.    bytes long */
  224.  
  225.     F_SET_MARK,            /* ^@ */
  226.     F_TOBEG,            /* ^A */
  227.     F_CHARBACK,            /* ^B */
  228.     F_TTY_INT,            /* ^C */
  229.     F_LIST_DELNEXT,        /* ^D */
  230.     F_TOEND,            /* ^E */
  231.     F_CHARFWD,            /* ^F */
  232.     F_UNASSIGNED,        /* ^G */
  233.     F_DELPREV,            /* ^H */
  234.     F_COMPLETE,            /* ^I */
  235.     F_NEWLINE,            /* ^J */
  236.     F_KILLEND,            /* ^K */
  237.     F_CLEARDISP,        /* ^L */
  238.     F_NEWLINE,            /* ^M */
  239.     F_DOWN_HIST,        /* ^N */
  240.     F_TTY_FLUSHO,        /* ^O */
  241.     F_UP_HIST,            /* ^P */
  242.     F_TTY_STARTO,        /* ^Q */
  243.     F_REDISP,            /* ^R */
  244.     F_TTY_STOPO,        /* ^S */
  245.     F_CHARSWITCH,        /* ^T */
  246.     F_KILLALL,            /* ^U */
  247.     F_QUOTE,            /* ^V */
  248.     F_KILLREGION,        /* ^W */
  249.     F_XKEY,            /* ^X */
  250.     F_YANK_KILL,        /* ^Y */
  251.     F_TTY_TSUSP,        /* ^Z */
  252.     F_METANEXT,            /* ^[ */
  253.     F_TTY_QUIT,            /* ^\ */
  254.     F_TTY_DSUSP,        /* ^] */
  255.     F_UNASSIGNED,        /* ^^ */
  256.     F_UNASSIGNED,        /* ^_ */
  257.     F_INSERT,            /* SPACE */
  258.     F_INSERT,            /* ! */
  259.     F_INSERT,            /* " */
  260.     F_INSERT,            /* # */
  261.     F_INSERT,            /* $ */
  262.     F_INSERT,            /* % */
  263.     F_INSERT,            /* & */
  264.     F_INSERT,            /* ' */
  265.     F_INSERT,            /* ( */
  266.     F_INSERT,            /* ) */
  267.     F_INSERT,            /* * */
  268.     F_INSERT,            /* + */
  269.     F_INSERT,            /* , */
  270.     F_INSERT,            /* - */
  271.     F_INSERT,            /* . */
  272.     F_INSERT,            /* / */
  273.     F_DIGIT,            /* 0 */
  274.     F_DIGIT,            /* 1 */
  275.     F_DIGIT,            /* 2 */
  276.     F_DIGIT,            /* 3 */
  277.     F_DIGIT,            /* 4 */
  278.     F_DIGIT,            /* 5 */
  279.     F_DIGIT,            /* 6 */
  280.     F_DIGIT,            /* 7 */
  281.     F_DIGIT,            /* 8 */
  282.     F_DIGIT,            /* 9 */
  283.     F_INSERT,            /* : */
  284.     F_INSERT,            /* ; */
  285.     F_INSERT,            /* < */
  286.     F_INSERT,            /* = */
  287.     F_INSERT,            /* > */
  288.     F_INSERT,            /* ? */
  289.     F_INSERT,            /* @ */
  290.     F_INSERT,            /* A */
  291.     F_INSERT,            /* B */
  292.     F_INSERT,            /* C */
  293.     F_INSERT,            /* D */
  294.     F_INSERT,            /* E */
  295.     F_INSERT,            /* F */
  296.     F_INSERT,            /* G */
  297.     F_INSERT,            /* H */
  298.     F_INSERT,            /* I */
  299.     F_INSERT,            /* J */
  300.     F_INSERT,            /* K */
  301.     F_INSERT,            /* L */
  302.     F_INSERT,            /* M */
  303.     F_INSERT,            /* N */
  304.     F_INSERT,            /* O */
  305.     F_INSERT,            /* P */
  306.     F_INSERT,            /* Q */
  307.     F_INSERT,            /* R */
  308.     F_INSERT,            /* S */
  309.     F_INSERT,            /* T */
  310.     F_INSERT,            /* U */
  311.     F_INSERT,            /* V */
  312.     F_INSERT,            /* W */
  313.     F_INSERT,            /* X */
  314.     F_INSERT,            /* Y */
  315.     F_INSERT,            /* Z */
  316.     F_INSERT,            /* [ */
  317.     F_INSERT,            /* \ */
  318.     F_INSERT,            /* ] */
  319.     F_INSERT,            /* ^ */
  320.     F_INSERT,            /* _ */
  321.     F_INSERT,            /* ` */
  322.     F_INSERT,            /* a */
  323.     F_INSERT,            /* b */
  324.     F_INSERT,            /* c */
  325.     F_INSERT,            /* d */
  326.     F_INSERT,            /* e */
  327.     F_INSERT,            /* f */
  328.     F_INSERT,            /* g */
  329.     F_INSERT,            /* h */
  330.     F_INSERT,            /* i */
  331.     F_INSERT,            /* j */
  332.     F_INSERT,            /* k */
  333.     F_INSERT,            /* l */
  334.     F_INSERT,            /* m */
  335.     F_INSERT,            /* n */
  336.     F_INSERT,            /* o */
  337.     F_INSERT,            /* p */
  338.     F_INSERT,            /* q */
  339.     F_INSERT,            /* r */
  340.     F_INSERT,            /* s */
  341.     F_INSERT,            /* t */
  342.     F_INSERT,            /* u */
  343.     F_INSERT,            /* v */
  344.     F_INSERT,            /* w */
  345.     F_INSERT,            /* x */
  346.     F_INSERT,            /* y */
  347.     F_INSERT,            /* z */
  348.     F_INSERT,            /* { */
  349.     F_INSERT,            /* | */
  350.     F_INSERT,            /* } */
  351.     F_INSERT,            /* ~ */
  352.     F_DELPREV,            /* ^? */
  353.     F_UNASSIGNED,        /* M-^@ */
  354.     F_UNASSIGNED,        /* M-^A */
  355.     F_UNASSIGNED,        /* M-^B */
  356.     F_UNASSIGNED,        /* M-^C */
  357.     F_LIST_CHOICES,        /* M-^D */
  358.     F_UNASSIGNED,        /* M-^E */
  359.     F_UNASSIGNED,        /* M-^F */
  360.     F_UNASSIGNED,        /* M-^G */
  361.     F_DELWORDPREV,        /* M-^H */
  362.     F_COMPLETE,            /* M-^I */
  363.     F_UNASSIGNED,        /* M-^J */
  364.     F_UNASSIGNED,        /* M-^K */
  365.     F_CLEARDISP,        /* M-^L */
  366.     F_UNASSIGNED,        /* M-^M */
  367.     F_UNASSIGNED,        /* M-^N */
  368.     F_UNASSIGNED,        /* M-^O */
  369.     F_UNASSIGNED,        /* M-^P */
  370.     F_UNASSIGNED,        /* M-^Q */
  371.     F_UNASSIGNED,        /* M-^R */
  372.     F_UNASSIGNED,        /* M-^S */
  373.     F_UNASSIGNED,        /* M-^T */
  374.     F_UNASSIGNED,        /* M-^U */
  375.     F_UNASSIGNED,        /* M-^V */
  376.     F_UNASSIGNED,        /* M-^W */
  377.     F_UNASSIGNED,        /* M-^X */
  378.     F_UNASSIGNED,        /* M-^Y */
  379.     F_RUN_FG_EDITOR,    /* M-^Z */
  380.     F_COMPLETE,            /* M-^[ */
  381.     F_UNASSIGNED,        /* M-^\ */
  382.     F_UNASSIGNED,        /* M-^] */
  383.     F_UNASSIGNED,        /* M-^^ */
  384.     F_COPYPREV,            /* M-^_ */
  385.     F_EXPAND_HISTORY,    /* M-SPACE */
  386.     F_EXPAND_HISTORY,    /* M-! */
  387.     F_UNASSIGNED,        /* M-" */
  388.     F_UNASSIGNED,        /* M-# */
  389.     F_CORRECT_L,        /* M-$ */
  390.     F_UNASSIGNED,        /* M-% */
  391.     F_UNASSIGNED,        /* M-& */
  392.     F_UNASSIGNED,        /* M-' */
  393.     F_UNASSIGNED,        /* M-( */
  394.     F_UNASSIGNED,        /* M-) */
  395.     F_UNASSIGNED,        /* M-* */
  396.     F_UNASSIGNED,        /* M-+ */
  397.     F_UNASSIGNED,        /* M-, */
  398.     F_UNASSIGNED,        /* M-- */
  399.     F_UNASSIGNED,        /* M-. */
  400.     F_UNASSIGNED,        /* M-/ */
  401.     F_ARGDIGIT,            /* M-0 */
  402.     F_ARGDIGIT,            /* M-1 */
  403.     F_ARGDIGIT,            /* M-2 */
  404.     F_ARGDIGIT,            /* M-3 */
  405.     F_ARGDIGIT,            /* M-4 */
  406.     F_ARGDIGIT,            /* M-5 */
  407.     F_ARGDIGIT,            /* M-6 */
  408.     F_ARGDIGIT,            /* M-7 */
  409.     F_ARGDIGIT,            /* M-8 */
  410.     F_ARGDIGIT,            /* M-9 */
  411.     F_UNASSIGNED,        /* M-: */
  412.     F_UNASSIGNED,        /* M-; */
  413.     F_UNASSIGNED,        /* M-< */
  414.     F_UNASSIGNED,        /* M-= */
  415.     F_UNASSIGNED,        /* M-> */
  416.     F_WHICH,            /* M-? */
  417.     F_UNASSIGNED,        /* M-@ */
  418.     F_UNASSIGNED,        /* M-A */
  419.     F_WORDBACK,            /* M-B */
  420.     F_CASECAPITAL,        /* M-C */
  421.     F_DELWORDNEXT,        /* M-D */
  422.     F_UNASSIGNED,        /* M-E */
  423.     F_WORDFWD,            /* M-F */
  424.     F_UNASSIGNED,        /* M-G */
  425.     F_HELPME,            /* M-H */
  426.     F_UNASSIGNED,        /* M-I */
  427.     F_UNASSIGNED,        /* M-J */
  428.     F_UNASSIGNED,        /* M-K */
  429.     F_CASELOWER,        /* M-L */
  430.     F_UNASSIGNED,        /* M-M */
  431.     F_DOWN_SEARCH_HIST,        /* M-N */
  432.     F_XKEY,            /* M-O *//* extended key esc PWP Mar 88 */
  433.     F_UP_SEARCH_HIST,        /* M-P */
  434.     F_UNASSIGNED,        /* M-Q */
  435.     F_TOGGLE_HIST,        /* M-R */
  436.     F_CORRECT,            /* M-S */
  437.     F_UNASSIGNED,        /* M-T */
  438.     F_CASEUPPER,        /* M-U */
  439.     F_UNASSIGNED,        /* M-V */
  440.     F_COPYREGION,        /* M-W */
  441.     F_UNASSIGNED,        /* M-X */
  442.     F_UNASSIGNED,        /* M-Y */
  443.     F_UNASSIGNED,        /* M-Z */
  444.     F_XKEY,            /* M-[ *//* extended key esc -mf Oct 87 */
  445.     F_UNASSIGNED,        /* M-\ */
  446.     F_UNASSIGNED,        /* M-] */
  447.     F_UNASSIGNED,        /* M-^ */
  448.     F_LAST_ITEM,        /* M-_ */
  449.     F_UNASSIGNED,        /* M-` */
  450.     F_UNASSIGNED,        /* M-a */
  451.     F_WORDBACK,            /* M-b */
  452.     F_CASECAPITAL,        /* M-c */
  453.     F_DELWORDNEXT,        /* M-d */
  454.     F_UNASSIGNED,        /* M-e */
  455.     F_WORDFWD,            /* M-f */
  456.     F_UNASSIGNED,        /* M-g */
  457.     F_HELPME,            /* M-h */
  458.     F_UNASSIGNED,        /* M-i */
  459.     F_UNASSIGNED,        /* M-j */
  460.     F_UNASSIGNED,        /* M-k */
  461.     F_CASELOWER,        /* M-l */
  462.     F_UNASSIGNED,        /* M-m */
  463.     F_DOWN_SEARCH_HIST,        /* M-n */
  464.     F_UNASSIGNED,        /* M-o */
  465.     F_UP_SEARCH_HIST,        /* M-p */
  466.     F_UNASSIGNED,        /* M-q */
  467.     F_TOGGLE_HIST,        /* M-r */
  468.     F_CORRECT,            /* M-s */
  469.     F_UNASSIGNED,        /* M-t */
  470.     F_CASEUPPER,        /* M-u */
  471.     F_UNASSIGNED,        /* M-v */
  472.     F_COPYREGION,        /* M-w */
  473.     F_UNASSIGNED,        /* M-x */
  474.     F_UNASSIGNED,        /* M-y */
  475.     F_UNASSIGNED,        /* M-z */
  476.     F_UNASSIGNED,        /* M-{ */
  477.     F_UNASSIGNED,        /* M-| */
  478.     F_UNASSIGNED,        /* M-} */
  479.     F_UNASSIGNED,        /* M-~ */
  480.     F_DELWORDPREV        /* M-^? */
  481. };
  482.  
  483. /*
  484.  * keymap table for vi.  Each index into above tbl; should be
  485.  * 256 entries long.  Vi mode uses a sticky-extend to do command mode:
  486.  * insert mode characters are in the normal keymap, and command mode
  487.  * in the extended keymap.
  488.  */
  489. KEYCMD  CcViMap[] = {
  490.     F_UNASSIGNED,        /* ^@ */
  491.     F_TOBEG,            /* ^A */
  492.     F_CHARBACK,            /* ^B */
  493.     F_TTY_INT,            /* ^C */
  494.     F_LIST_EOF,            /* ^D */
  495.     F_TOEND,            /* ^E */
  496.     F_CHARFWD,            /* ^F */
  497.     F_LIST_GLOB,        /* ^G */
  498.     F_DELPREV,            /* ^H */
  499.     F_COMPLETE,            /* ^I */
  500.     F_NEWLINE,            /* ^J */
  501.     F_KILLEND,            /* ^K */
  502.     F_CLEARDISP,        /* ^L */
  503.     F_NEWLINE,            /* ^M */
  504.     F_DOWN_HIST,        /* ^N */
  505.     F_TTY_FLUSHO,        /* ^O */
  506.     F_UP_HIST,            /* ^P */
  507.     F_TTY_STARTO,        /* ^Q */
  508.     F_REDISP,            /* ^R */
  509.     F_TTY_STOPO,        /* ^S */
  510.     F_CHARSWITCH,        /* ^T */
  511.     F_KILLBEG,            /* ^U */
  512.     F_QUOTE,            /* ^V */
  513.     F_DELWORDPREV,        /* ^W */
  514.     F_EXPAND,            /* ^X */
  515.     F_TTY_DSUSP,        /* ^Y */
  516.     F_TTY_TSUSP,        /* ^Z */
  517.     V_CMD_MODE,            /* ^[ */
  518.     F_TTY_QUIT,            /* ^\ */
  519.     F_UNASSIGNED,        /* ^] */
  520.     F_UNASSIGNED,        /* ^^ */
  521.     F_UNASSIGNED,        /* ^_ */
  522.     F_INSERT,            /* SPACE */
  523.     F_INSERT,            /* ! */
  524.     F_INSERT,            /* " */
  525.     F_INSERT,            /* # */
  526.     F_INSERT,            /* $ */
  527.     F_INSERT,            /* % */
  528.     F_INSERT,            /* & */
  529.     F_INSERT,            /* ' */
  530.     F_INSERT,            /* ( */
  531.     F_INSERT,            /* ) */
  532.     F_INSERT,            /* * */
  533.     F_INSERT,            /* + */
  534.     F_INSERT,            /* , */
  535.     F_INSERT,            /* - */
  536.     F_INSERT,            /* . */
  537.     F_INSERT,            /* / */
  538.     F_INSERT,            /* 0 */
  539.     F_INSERT,            /* 1 */
  540.     F_INSERT,            /* 2 */
  541.     F_INSERT,            /* 3 */
  542.     F_INSERT,            /* 4 */
  543.     F_INSERT,            /* 5 */
  544.     F_INSERT,            /* 6 */
  545.     F_INSERT,            /* 7 */
  546.     F_INSERT,            /* 8 */
  547.     F_INSERT,            /* 9 */
  548.     F_INSERT,            /* : */
  549.     F_INSERT,            /* ; */
  550.     F_INSERT,            /* < */
  551.     F_INSERT,            /* = */
  552.     F_INSERT,            /* > */
  553.     F_INSERT,            /* ? */
  554.     F_INSERT,            /* @ */
  555.     F_INSERT,            /* A */
  556.     F_INSERT,            /* B */
  557.     F_INSERT,            /* C */
  558.     F_INSERT,            /* D */
  559.     F_INSERT,            /* E */
  560.     F_INSERT,            /* F */
  561.     F_INSERT,            /* G */
  562.     F_INSERT,            /* H */
  563.     F_INSERT,            /* I */
  564.     F_INSERT,            /* J */
  565.     F_INSERT,            /* K */
  566.     F_INSERT,            /* L */
  567.     F_INSERT,            /* M */
  568.     F_INSERT,            /* N */
  569.     F_INSERT,            /* O */
  570.     F_INSERT,            /* P */
  571.     F_INSERT,            /* Q */
  572.     F_INSERT,            /* R */
  573.     F_INSERT,            /* S */
  574.     F_INSERT,            /* T */
  575.     F_INSERT,            /* U */
  576.     F_INSERT,            /* V */
  577.     F_INSERT,            /* W */
  578.     F_INSERT,            /* X */
  579.     F_INSERT,            /* Y */
  580.     F_INSERT,            /* Z */
  581.     F_INSERT,            /* [ */
  582.     F_INSERT,            /* \ */
  583.     F_INSERT,            /* ] */
  584.     F_INSERT,            /* ^ */
  585.     F_INSERT,            /* _ */
  586.     F_INSERT,            /* ` */
  587.     F_INSERT,            /* a */
  588.     F_INSERT,            /* b */
  589.     F_INSERT,            /* c */
  590.     F_INSERT,            /* d */
  591.     F_INSERT,            /* e */
  592.     F_INSERT,            /* f */
  593.     F_INSERT,            /* g */
  594.     F_INSERT,            /* h */
  595.     F_INSERT,            /* i */
  596.     F_INSERT,            /* j */
  597.     F_INSERT,            /* k */
  598.     F_INSERT,            /* l */
  599.     F_INSERT,            /* m */
  600.     F_INSERT,            /* n */
  601.     F_INSERT,            /* o */
  602.     F_INSERT,            /* p */
  603.     F_INSERT,            /* q */
  604.     F_INSERT,            /* r */
  605.     F_INSERT,            /* s */
  606.     F_INSERT,            /* t */
  607.     F_INSERT,            /* u */
  608.     F_INSERT,            /* v */
  609.     F_INSERT,            /* w */
  610.     F_INSERT,            /* x */
  611.     F_INSERT,            /* y */
  612.     F_INSERT,            /* z */
  613.     F_INSERT,            /* { */
  614.     F_INSERT,            /* | */
  615.     F_INSERT,            /* } */
  616.     F_INSERT,            /* ~ */
  617.     F_DELPREV,            /* ^? */
  618.     F_UNASSIGNED,        /* M-^@ */
  619.     F_UNASSIGNED,        /* M-^A */
  620.     F_UNASSIGNED,        /* M-^B */
  621.     F_UNASSIGNED,        /* M-^C */
  622.     F_UNASSIGNED,        /* M-^D */
  623.     F_UNASSIGNED,        /* M-^E */
  624.     F_UNASSIGNED,        /* M-^F */
  625.     F_UNASSIGNED,        /* M-^G */
  626.     F_UNASSIGNED,        /* M-^H */
  627.     F_UNASSIGNED,        /* M-^I */
  628.     F_UNASSIGNED,        /* M-^J */
  629.     F_UNASSIGNED,        /* M-^K */
  630.     F_UNASSIGNED,        /* M-^L */
  631.     F_UNASSIGNED,        /* M-^M */
  632.     F_UNASSIGNED,        /* M-^N */
  633.     F_UNASSIGNED,        /* M-^O */
  634.     F_UNASSIGNED,        /* M-^P */
  635.     F_UNASSIGNED,        /* M-^Q */
  636.     F_UNASSIGNED,        /* M-^R */
  637.     F_UNASSIGNED,        /* M-^S */
  638.     F_UNASSIGNED,        /* M-^T */
  639.     F_UNASSIGNED,        /* M-^U */
  640.     F_UNASSIGNED,        /* M-^V */
  641.     F_UNASSIGNED,        /* M-^W */
  642.     F_UNASSIGNED,        /* M-^X */
  643.     F_UNASSIGNED,        /* M-^Y */
  644.     F_UNASSIGNED,        /* M-^Z */
  645.     F_UNASSIGNED,        /* M-^[ */
  646.     F_UNASSIGNED,        /* M-^\ */
  647.     F_UNASSIGNED,        /* M-^] */
  648.     F_UNASSIGNED,        /* M-^^ */
  649.     F_UNASSIGNED,        /* M-^_ */
  650.     F_UNASSIGNED,        /* M-SPACE */
  651.     F_UNASSIGNED,        /* M-! */
  652.     F_UNASSIGNED,        /* M-" */
  653.     F_UNASSIGNED,        /* M-# */
  654.     F_UNASSIGNED,        /* M-$ */
  655.     F_UNASSIGNED,        /* M-% */
  656.     F_UNASSIGNED,        /* M-& */
  657.     F_UNASSIGNED,        /* M-' */
  658.     F_UNASSIGNED,        /* M-( */
  659.     F_UNASSIGNED,        /* M-) */
  660.     F_UNASSIGNED,        /* M-* */
  661.     F_UNASSIGNED,        /* M-+ */
  662.     F_UNASSIGNED,        /* M-, */
  663.     F_UNASSIGNED,        /* M-- */
  664.     F_UNASSIGNED,        /* M-. */
  665.     F_UNASSIGNED,        /* M-/ */
  666.     F_UNASSIGNED,        /* M-0 */
  667.     F_UNASSIGNED,        /* M-1 */
  668.     F_UNASSIGNED,        /* M-2 */
  669.     F_UNASSIGNED,        /* M-3 */
  670.     F_UNASSIGNED,        /* M-4 */
  671.     F_UNASSIGNED,        /* M-5 */
  672.     F_UNASSIGNED,        /* M-6 */
  673.     F_UNASSIGNED,        /* M-7 */
  674.     F_UNASSIGNED,        /* M-8 */
  675.     F_UNASSIGNED,        /* M-9 */
  676.     F_UNASSIGNED,        /* M-: */
  677.     F_UNASSIGNED,        /* M-; */
  678.     F_UNASSIGNED,        /* M-< */
  679.     F_UNASSIGNED,        /* M-= */
  680.     F_UNASSIGNED,        /* M-> */
  681.     F_UNASSIGNED,        /* M-? */
  682.     F_UNASSIGNED,        /* M-@ */
  683.     F_UNASSIGNED,        /* M-A */
  684.     F_UNASSIGNED,        /* M-B */
  685.     F_UNASSIGNED,        /* M-C */
  686.     F_UNASSIGNED,        /* M-D */
  687.     F_UNASSIGNED,        /* M-E */
  688.     F_UNASSIGNED,        /* M-F */
  689.     F_UNASSIGNED,        /* M-G */
  690.     F_UNASSIGNED,        /* M-H */
  691.     F_UNASSIGNED,        /* M-I */
  692.     F_UNASSIGNED,        /* M-J */
  693.     F_UNASSIGNED,        /* M-K */
  694.     F_UNASSIGNED,        /* M-L */
  695.     F_UNASSIGNED,        /* M-M */
  696.     F_UNASSIGNED,        /* M-N */
  697.     F_UNASSIGNED,        /* M-O */
  698.     F_UNASSIGNED,        /* M-P */
  699.     F_UNASSIGNED,        /* M-Q */
  700.     F_UNASSIGNED,        /* M-R */
  701.     F_UNASSIGNED,        /* M-S */
  702.     F_UNASSIGNED,        /* M-T */
  703.     F_UNASSIGNED,        /* M-U */
  704.     F_UNASSIGNED,        /* M-V */
  705.     F_UNASSIGNED,        /* M-W */
  706.     F_UNASSIGNED,        /* M-X */
  707.     F_UNASSIGNED,        /* M-Y */
  708.     F_UNASSIGNED,        /* M-Z */
  709.     F_UNASSIGNED,        /* M-[ */
  710.     F_UNASSIGNED,        /* M-\ */
  711.     F_UNASSIGNED,        /* M-] */
  712.     F_UNASSIGNED,        /* M-^ */
  713.     F_UNASSIGNED,        /* M-_ */
  714.     F_UNASSIGNED,        /* M-` */
  715.     F_UNASSIGNED,        /* M-a */
  716.     F_UNASSIGNED,        /* M-b */
  717.     F_UNASSIGNED,        /* M-c */
  718.     F_UNASSIGNED,        /* M-d */
  719.     F_UNASSIGNED,        /* M-e */
  720.     F_UNASSIGNED,        /* M-f */
  721.     F_UNASSIGNED,        /* M-g */
  722.     F_UNASSIGNED,        /* M-h */
  723.     F_UNASSIGNED,        /* M-i */
  724.     F_UNASSIGNED,        /* M-j */
  725.     F_UNASSIGNED,        /* M-k */
  726.     F_UNASSIGNED,        /* M-l */
  727.     F_UNASSIGNED,        /* M-m */
  728.     F_UNASSIGNED,        /* M-n */
  729.     F_UNASSIGNED,        /* M-o */
  730.     F_UNASSIGNED,        /* M-p */
  731.     F_UNASSIGNED,        /* M-q */
  732.     F_UNASSIGNED,        /* M-r */
  733.     F_UNASSIGNED,        /* M-s */
  734.     F_UNASSIGNED,        /* M-t */
  735.     F_UNASSIGNED,        /* M-u */
  736.     F_UNASSIGNED,        /* M-v */
  737.     F_UNASSIGNED,        /* M-w */
  738.     F_UNASSIGNED,        /* M-x */
  739.     F_UNASSIGNED,        /* M-y */
  740.     F_UNASSIGNED,        /* M-z */
  741.     F_UNASSIGNED,        /* M-{ */
  742.     F_UNASSIGNED,        /* M-| */
  743.     F_UNASSIGNED,        /* M-} */
  744.     F_UNASSIGNED,        /* M-~ */
  745.     F_UNASSIGNED        /* M-^? */
  746. };
  747.  
  748. KEYCMD  CcViCmdMap[] = {
  749.     F_UNASSIGNED,        /* ^@ */
  750.     F_TOBEG,            /* ^A */
  751.     F_UNASSIGNED,        /* ^B */
  752.     F_TTY_INT,            /* ^C */
  753.     F_LIST_CHOICES,        /* ^D */
  754.     F_TOEND,            /* ^E */
  755.     F_UNASSIGNED,        /* ^F */
  756.     F_LIST_GLOB,        /* ^G */
  757.     F_DELPREV,            /* ^H */
  758.     V_CM_COMPLETE,        /* ^I */
  759.     F_NEWLINE,            /* ^J */
  760.     F_KILLEND,            /* ^K */
  761.     F_CLEARDISP,        /* ^L */
  762.     F_NEWLINE,            /* ^M */
  763.     F_DOWN_HIST,        /* ^N */
  764.     F_TTY_FLUSHO,        /* ^O */
  765.     F_UP_HIST,            /* ^P */
  766.     F_TTY_STARTO,        /* ^Q */
  767.     F_REDISP,            /* ^R */
  768.     F_TTY_STOPO,        /* ^S */
  769.     F_UNASSIGNED,        /* ^T */
  770.     F_KILLBEG,            /* ^U */
  771.     F_UNASSIGNED,        /* ^V */
  772.     F_DELWORDPREV,        /* ^W */
  773.     F_EXPAND,            /* ^X */
  774.     F_UNASSIGNED,        /* ^Y */
  775.     F_UNASSIGNED,        /* ^Z */
  776.     F_METANEXT,            /* ^[ */
  777.     F_TTY_QUIT,            /* ^\ */
  778.     F_UNASSIGNED,        /* ^] */
  779.     F_UNASSIGNED,        /* ^^ */
  780.     F_UNASSIGNED,        /* ^_ */
  781.     F_CHARFWD,            /* SPACE */
  782.     F_EXPAND_HISTORY,    /* ! */
  783.     F_UNASSIGNED,        /* " */
  784.     F_UNASSIGNED,        /* # */
  785.     F_TOEND,            /* $ */
  786.     F_UNASSIGNED,        /* % */
  787.     F_UNASSIGNED,        /* & */
  788.     F_UNASSIGNED,        /* ' */
  789.     F_UNASSIGNED,        /* ( */
  790.     F_UNASSIGNED,        /* ) */
  791.     F_EXPAND_GLOB,        /* * */
  792.     F_UNASSIGNED,        /* + */
  793.     F_UNASSIGNED,        /* , */
  794.     F_UNASSIGNED,        /* - */
  795.     F_UNASSIGNED,        /* . */
  796.     F_UNASSIGNED,        /* / */
  797.     V_ZERO,            /* 0 */
  798.     F_ARGDIGIT,            /* 1 */
  799.     F_ARGDIGIT,            /* 2 */
  800.     F_ARGDIGIT,            /* 3 */
  801.     F_ARGDIGIT,            /* 4 */
  802.     F_ARGDIGIT,            /* 5 */
  803.     F_ARGDIGIT,            /* 6 */
  804.     F_ARGDIGIT,            /* 7 */
  805.     F_ARGDIGIT,            /* 8 */
  806.     F_ARGDIGIT,            /* 9 */
  807.     F_UNASSIGNED,        /* : */
  808.     F_UNASSIGNED,        /* ; */
  809.     F_UNASSIGNED,        /* < */
  810.     F_UNASSIGNED,        /* = */
  811.     F_UNASSIGNED,        /* > */
  812.     F_WHICH,            /* ? */
  813.     F_UNASSIGNED,        /* @ */
  814.     V_ADDEND,            /* A */
  815.     F_WORDBACK,            /* B */
  816.     V_CHGTOEND,            /* C */
  817.     F_KILLEND,            /* D */
  818.     F_UNASSIGNED,        /* E */
  819.     F_UNASSIGNED,        /* F */
  820.     F_UNASSIGNED,        /* G */
  821.     F_UNASSIGNED,        /* H */
  822.     V_INSBEG,            /* I */
  823.     F_DOWN_SEARCH_HIST,        /* J */
  824.     F_UP_SEARCH_HIST,        /* K */
  825.     F_UNASSIGNED,        /* L */
  826.     F_UNASSIGNED,        /* M */
  827.     F_UNASSIGNED,        /* N */
  828.     F_XKEY,            /* O */
  829.     F_UNASSIGNED,        /* P */
  830.     F_UNASSIGNED,        /* Q */
  831.     V_REPLMODE,            /* R */
  832.     V_SUBSTLINE,        /* S */
  833.     F_TOGGLE_HIST,        /* T */
  834.     F_UNASSIGNED,        /* U */
  835.     F_EXPAND_VARS,        /* V */
  836.     F_WORDFWD,            /* W */
  837.     F_DELPREV,            /* X */
  838.     F_UNASSIGNED,        /* Y */
  839.     F_UNASSIGNED,        /* Z */
  840.     F_XKEY,            /* [ */
  841.     F_UNASSIGNED,        /* \ */
  842.     F_UNASSIGNED,        /* ] */
  843.     F_TOBEG,            /* ^ */
  844.     F_UNASSIGNED,        /* _ */
  845.     F_UNASSIGNED,        /* ` */
  846.     V_ADD,            /* a */
  847.     F_WORDBACK,            /* b */
  848.     F_UNASSIGNED,        /* c */
  849.     F_DELWORDNEXT,        /* d */
  850.     F_UNASSIGNED,        /* e */
  851.     F_UNASSIGNED,        /* f */
  852.     F_UNASSIGNED,        /* g */
  853.     F_CHARBACK,            /* h */
  854.     V_INSERT,            /* i */
  855.     F_DOWN_HIST,        /* j */
  856.     F_UP_HIST,            /* k */
  857.     F_CHARFWD,            /* l */
  858.     F_UNASSIGNED,        /* m */
  859.     F_UNASSIGNED,        /* n */
  860.     F_UNASSIGNED,        /* o */
  861.     F_UNASSIGNED,        /* p */
  862.     F_UNASSIGNED,        /* q */
  863.     V_REPLONE,            /* r */
  864.     V_SUBSTCHAR,        /* s */
  865.     F_TOGGLE_HIST,        /* t */
  866.     F_UNASSIGNED,        /* u */
  867.     F_EXPAND_VARS,        /* v */
  868.     V_WORDBEGNEXT,        /* w */
  869.     F_DELNEXT,            /* x */
  870.     F_UNASSIGNED,        /* y */
  871.     F_UNASSIGNED,        /* z */
  872.     F_UNASSIGNED,        /* { */
  873.     F_UNASSIGNED,        /* | */
  874.     F_UNASSIGNED,        /* } */
  875.     V_CHGCASE,            /* ~ */
  876.     F_DELPREV,            /* ^? */
  877.     F_UNASSIGNED,        /* M-^@ */
  878.     F_UNASSIGNED,        /* M-^A */
  879.     F_UNASSIGNED,        /* M-^B */
  880.     F_UNASSIGNED,        /* M-^C */
  881.     F_UNASSIGNED,        /* M-^D */
  882.     F_UNASSIGNED,        /* M-^E */
  883.     F_UNASSIGNED,        /* M-^F */
  884.     F_UNASSIGNED,        /* M-^G */
  885.     F_UNASSIGNED,        /* M-^H */
  886.     F_UNASSIGNED,        /* M-^I */
  887.     F_UNASSIGNED,        /* M-^J */
  888.     F_UNASSIGNED,        /* M-^K */
  889.     F_UNASSIGNED,        /* M-^L */
  890.     F_UNASSIGNED,        /* M-^M */
  891.     F_UNASSIGNED,        /* M-^N */
  892.     F_UNASSIGNED,        /* M-^O */
  893.     F_UNASSIGNED,        /* M-^P */
  894.     F_UNASSIGNED,        /* M-^Q */
  895.     F_UNASSIGNED,        /* M-^R */
  896.     F_UNASSIGNED,        /* M-^S */
  897.     F_UNASSIGNED,        /* M-^T */
  898.     F_UNASSIGNED,        /* M-^U */
  899.     F_UNASSIGNED,        /* M-^V */
  900.     F_UNASSIGNED,        /* M-^W */
  901.     F_UNASSIGNED,        /* M-^X */
  902.     F_UNASSIGNED,        /* M-^Y */
  903.     F_UNASSIGNED,        /* M-^Z */
  904.     F_UNASSIGNED,        /* M-^[ */
  905.     F_UNASSIGNED,        /* M-^\ */
  906.     F_UNASSIGNED,        /* M-^] */
  907.     F_UNASSIGNED,        /* M-^^ */
  908.     F_UNASSIGNED,        /* M-^_ */
  909.     F_UNASSIGNED,        /* M-SPACE */
  910.     F_UNASSIGNED,        /* M-! */
  911.     F_UNASSIGNED,        /* M-" */
  912.     F_UNASSIGNED,        /* M-# */
  913.     F_UNASSIGNED,        /* M-$ */
  914.     F_UNASSIGNED,        /* M-% */
  915.     F_UNASSIGNED,        /* M-& */
  916.     F_UNASSIGNED,        /* M-' */
  917.     F_UNASSIGNED,        /* M-( */
  918.     F_UNASSIGNED,        /* M-) */
  919.     F_UNASSIGNED,        /* M-* */
  920.     F_UNASSIGNED,        /* M-+ */
  921.     F_UNASSIGNED,        /* M-, */
  922.     F_UNASSIGNED,        /* M-- */
  923.     F_UNASSIGNED,        /* M-. */
  924.     F_UNASSIGNED,        /* M-/ */
  925.     F_UNASSIGNED,        /* M-0 */
  926.     F_UNASSIGNED,        /* M-1 */
  927.     F_UNASSIGNED,        /* M-2 */
  928.     F_UNASSIGNED,        /* M-3 */
  929.     F_UNASSIGNED,        /* M-4 */
  930.     F_UNASSIGNED,        /* M-5 */
  931.     F_UNASSIGNED,        /* M-6 */
  932.     F_UNASSIGNED,        /* M-7 */
  933.     F_UNASSIGNED,        /* M-8 */
  934.     F_UNASSIGNED,        /* M-9 */
  935.     F_UNASSIGNED,        /* M-: */
  936.     F_UNASSIGNED,        /* M-; */
  937.     F_UNASSIGNED,        /* M-< */
  938.     F_UNASSIGNED,        /* M-= */
  939.     F_UNASSIGNED,        /* M-> */
  940.     F_HELPME,            /* M-? */
  941.     F_UNASSIGNED,        /* M-@ */
  942.     F_UNASSIGNED,        /* M-A */
  943.     F_UNASSIGNED,        /* M-B */
  944.     F_UNASSIGNED,        /* M-C */
  945.     F_UNASSIGNED,        /* M-D */
  946.     F_UNASSIGNED,        /* M-E */
  947.     F_UNASSIGNED,        /* M-F */
  948.     F_UNASSIGNED,        /* M-G */
  949.     F_UNASSIGNED,        /* M-H */
  950.     F_UNASSIGNED,        /* M-I */
  951.     F_UNASSIGNED,        /* M-J */
  952.     F_UNASSIGNED,        /* M-K */
  953.     F_UNASSIGNED,        /* M-L */
  954.     F_UNASSIGNED,        /* M-M */
  955.     F_UNASSIGNED,        /* M-N */
  956.     F_XKEY,            /* M-O *//* extended key esc PWP Mar 88 */
  957.     F_UNASSIGNED,        /* M-P */
  958.     F_UNASSIGNED,        /* M-Q */
  959.     F_UNASSIGNED,        /* M-R */
  960.     F_UNASSIGNED,        /* M-S */
  961.     F_UNASSIGNED,        /* M-T */
  962.     F_UNASSIGNED,        /* M-U */
  963.     F_UNASSIGNED,        /* M-V */
  964.     F_UNASSIGNED,        /* M-W */
  965.     F_UNASSIGNED,        /* M-X */
  966.     F_UNASSIGNED,        /* M-Y */
  967.     F_UNASSIGNED,        /* M-Z */
  968.     F_XKEY,            /* M-[ *//* extended key esc -mf Oct 87 */
  969.     F_UNASSIGNED,        /* M-\ */
  970.     F_UNASSIGNED,        /* M-] */
  971.     F_UNASSIGNED,        /* M-^ */
  972.     F_UNASSIGNED,        /* M-_ */
  973.     F_UNASSIGNED,        /* M-` */
  974.     F_UNASSIGNED,        /* M-a */
  975.     F_UNASSIGNED,        /* M-b */
  976.     F_UNASSIGNED,        /* M-c */
  977.     F_UNASSIGNED,        /* M-d */
  978.     F_UNASSIGNED,        /* M-e */
  979.     F_UNASSIGNED,        /* M-f */
  980.     F_UNASSIGNED,        /* M-g */
  981.     F_UNASSIGNED,        /* M-h */
  982.     F_UNASSIGNED,        /* M-i */
  983.     F_UNASSIGNED,        /* M-j */
  984.     F_UNASSIGNED,        /* M-k */
  985.     F_UNASSIGNED,        /* M-l */
  986.     F_UNASSIGNED,        /* M-m */
  987.     F_UNASSIGNED,        /* M-n */
  988.     F_UNASSIGNED,        /* M-o */
  989.     F_UNASSIGNED,        /* M-p */
  990.     F_UNASSIGNED,        /* M-q */
  991.     F_UNASSIGNED,        /* M-r */
  992.     F_UNASSIGNED,        /* M-s */
  993.     F_UNASSIGNED,        /* M-t */
  994.     F_UNASSIGNED,        /* M-u */
  995.     F_UNASSIGNED,        /* M-v */
  996.     F_UNASSIGNED,        /* M-w */
  997.     F_UNASSIGNED,        /* M-x */
  998.     F_UNASSIGNED,        /* M-y */
  999.     F_UNASSIGNED,        /* M-z */
  1000.     F_UNASSIGNED,        /* M-{ */
  1001.     F_UNASSIGNED,        /* M-| */
  1002.     F_UNASSIGNED,        /* M-} */
  1003.     F_UNASSIGNED,        /* M-~ */
  1004.     F_UNASSIGNED        /* M-^? */
  1005. };
  1006.  
  1007.  
  1008. struct KeyFuncs FuncNames[] = {
  1009.     "load-average", F_LOAD_AVERAGE,
  1010.     "Display load average and current process status",
  1011.     "backward-char", F_CHARBACK,
  1012.     "Move back a character",
  1013.     "backward-delete-char", F_DELPREV,
  1014.     "Delete the character behind cursor",
  1015.     "backward-delete-word", F_DELWORDPREV,
  1016.     "Cut from beginning of current word to cursor - saved in cut buffer",
  1017.     "backward-kill-line", F_KILLBEG,
  1018.     "Cut from beginning of line to cursor - save in cut buffer",
  1019.     "backward-word", F_WORDBACK,
  1020.     "Move to beginning of current word",
  1021.     "beginning-of-line", F_TOBEG,
  1022.     "Move to beginning of line",
  1023.     "capitalize-word", F_CASECAPITAL,
  1024.     "Capitalize the characters from cursor to end of current word",
  1025.     "change-case", V_CHGCASE,
  1026.     "Vi change case of character under cursor and advance one character",
  1027.     "change-till-end-of-line", V_CHGTOEND,    /* backwards compat. */
  1028.     "Vi change to end of line",
  1029.     "clear-screen", F_CLEARDISP,
  1030.     "Clear screen leaving current line on top",
  1031.     "complete-word", F_COMPLETE,
  1032.     "Complete current word",
  1033.     "copy-prev-word", F_COPYPREV,
  1034.     "Copy current word to cursor",
  1035.     "copy-region-as-kill", F_COPYREGION,
  1036.     "Copy area between mark and cursor to cut buffer",
  1037.     "delete-char", F_DELNEXT,
  1038.     "Delete character under cursor",
  1039.     "delete-char-or-list", F_LIST_DELNEXT,
  1040.     "Delete character under cursor or list completions if at end of line",
  1041.     "delete-word", F_DELWORDNEXT,
  1042.     "Cut from cursor to end of current word - save in cut buffer",
  1043.     "digit", F_DIGIT,
  1044.     "Adds to argument if started or enters digit",
  1045.     "digit-argument", F_ARGDIGIT,
  1046.     "Digit that starts argument",
  1047.     "down-history", F_DOWN_HIST,
  1048.     "Move to next history line",
  1049.     "downcase-word", F_CASELOWER,
  1050.     "Lowercase the characters from cursor to end of current word",
  1051.     "end-of-file", F_SEND_EOF,
  1052.     "Indicate end of file",
  1053.     "end-of-line", F_TOEND,
  1054.     "Move cursor to end of line",
  1055.     "exchange-point-and-mark", F_EXCHANGE_MARK,
  1056.     "Exchange the cursor and mark",
  1057.     "expand-glob", F_EXPAND_GLOB,
  1058.     "Expand file name wildcards",
  1059.     "expand-history", F_EXPAND_HISTORY,
  1060.     "Expand history escapes",
  1061.     "expand-line", F_EXPAND,
  1062.     "Expand the history escapes in a line",
  1063.     "expand-variables", F_EXPAND_VARS,
  1064.     "Expand variables",
  1065.     "forward-char", F_CHARFWD,
  1066.     "Move forward one character",
  1067.     "forward-word", F_WORDFWD,
  1068.     "Move forward to end of current word",
  1069.     "gosmacs-transpose-chars", F_GCHARSWITCH,
  1070.     "Exchange the two characters before the cursor",
  1071.     "history-search-backward", F_UP_SEARCH_HIST,
  1072.     "Search in history backwards for line beginning as current",
  1073.     "history-search-forward", F_DOWN_SEARCH_HIST,
  1074.     "Search in history forward for line beginning as current",
  1075.     "insert-last-word", F_LAST_ITEM,
  1076.     "Insert last item of previous command",
  1077.     "keyboard-quit", F_STARTOVER,
  1078.     "Clear line",
  1079.     "kill-line", F_KILLEND,
  1080.     "Cut to end of line and save in cut buffer",
  1081.     "kill-region", F_KILLREGION,
  1082.     "Cut area between mark and cursor and save in cut buffer",
  1083.     "kill-whole-line", F_KILLALL,
  1084.     "Cut the entire line and save in cut buffer",
  1085.     "list-choices", F_LIST_CHOICES,
  1086.     "List choices for completion",
  1087.     "list-glob", F_LIST_GLOB,
  1088.     "List file name wildcard matches",
  1089.     "list-or-eof", F_LIST_EOF,
  1090.     "List choices for completion or indicate end of file if empty line",
  1091.     "magic-space", F_MAGIC_SPACE,
  1092.     "Expand history escapes and insert a space",
  1093.     "newline", F_NEWLINE,
  1094.     "Execute command",
  1095.     "overwrite-mode", F_INSOVR,
  1096.     "Switch from insert to overwrite mode or vice versa",
  1097.     "prefix-meta", F_METANEXT,
  1098.     "Add 8th bit to next character typed",
  1099.     "quoted-insert", F_QUOTE,
  1100.     "Add the next character typed to the line verbatim",
  1101.     "redisplay", F_REDISP,
  1102.     "Redisplay everything",
  1103.     "run-fg-editor", F_RUN_FG_EDITOR,
  1104.     "Restart stopped editor",
  1105.     "run-help", F_HELPME,
  1106.     "Look for help on current command",
  1107.     "self-insert-command", F_INSERT,
  1108.     "This character is added to the line",
  1109.     "sequence-lead-in", F_XKEY,
  1110.     "This character is the first in a character sequence",
  1111.     "set-mark-command", F_SET_MARK,
  1112.     "Set the mark at cursor",
  1113.     "spell-word", F_CORRECT,
  1114.     "Correct the spelling of current word",
  1115.     "spell-line", F_CORRECT_L,
  1116.     "Correct the spelling of entire line",
  1117.     "toggle-literal-history", F_TOGGLE_HIST,
  1118.     "Toggle between literal and lexical current history line",
  1119.     "transpose-chars", F_CHARSWITCH,
  1120.     "Exchange the character to the left of the cursor with the one under",
  1121.     "transpose-gosling", F_GCHARSWITCH,
  1122.     "Exchange the two characters before the cursor",
  1123.     /* EGS: make Convex Users happy */
  1124.     "tty-dsusp", F_TTY_DSUSP,
  1125.     "Tty delayed suspend character",
  1126.     "tty-flush-output", F_TTY_FLUSHO,
  1127.     "Tty flush output character",
  1128.     "tty-sigintr", F_TTY_INT,
  1129.     "Tty interrupt character",
  1130.     "tty-sigquit", F_TTY_QUIT,
  1131.     "Tty quit character",
  1132.     "tty-sigtsusp", F_TTY_TSUSP,
  1133.     "Tty suspend character",
  1134.     "tty-start-output", F_TTY_STARTO,
  1135.     "Tty allow output character",
  1136.     "tty-stop-output", F_TTY_STOPO,
  1137.     "Tty disallow output character",
  1138.     "undefined-key", F_UNASSIGNED,
  1139.     "Indicates unbound character",
  1140.     "universal-argument", F_ARGFOUR,
  1141.     "Emacs universal argument (argument times 4)",
  1142.     "up-history", F_UP_HIST,
  1143.     "Move to previous history line",
  1144.     "upcase-word", F_CASEUPPER,
  1145.     "Uppercase the characters from cursor to end of current word",
  1146.     "vi-beginning-of-next-word", V_WORDBEGNEXT,
  1147.     "Vi goto the beginning of next word",
  1148.     "vi-add", V_ADD,
  1149.     "Vi enter insert mode after the cursor",
  1150.     "vi-add-at-eol", V_ADDEND,
  1151.     "Vi enter insert mode at end of line",
  1152.     "vi-chg-case", V_CHGCASE,
  1153.     "Vi change case of character under cursor and advance one character",
  1154.     "vi-chg-to-eol", V_CHGTOEND,
  1155.     "Vi change to end of line",
  1156.     "vi-cmd-mode", V_CMD_MODE,
  1157.     "Enter vi command mode (use alternative key bindings)",
  1158.     "vi-cmd-mode-complete", V_CM_COMPLETE,
  1159.     "Vi command mode complete current word",
  1160.     "vi-insert", V_INSERT,
  1161.     "Enter vi insert mode",
  1162.     "vi-insert-at-bol", V_INSBEG,
  1163.     "Enter vi insert mode at beginning of line",
  1164.     "vi-replace-char", V_REPLONE,
  1165.     "Vi replace character under the cursor with the next character typed",
  1166.     "vi-replace-mode", V_REPLMODE,
  1167.     "Vi replace mode",
  1168.     "vi-substitute-char", V_SUBSTCHAR,
  1169.     "Vi replace character under the cursor and enter insert mode",
  1170.     "vi-substitute-line", V_SUBSTLINE,
  1171.     "Vi replace entire line",
  1172.     "vi-zero", V_ZERO,
  1173.     "Vi goto the beginning of line",
  1174.     "which-command", F_WHICH,
  1175.     "Perform which of current command",
  1176.     "yank", F_YANK_KILL,
  1177.     "Paste cut buffer at cursor position",
  1178.     0, 0
  1179. };
  1180.  
  1181. #ifdef DEBUG_EDIT
  1182. void
  1183. CheckMaps()
  1184. {                /* check the size of the key maps */
  1185.     int     c1 = (256 * sizeof(KEYCMD));
  1186.  
  1187.     if ((sizeof(CcKeyMap)) != c1)
  1188.     xprintf("CcKeyMap should be 256 entries, but is %d.\r\n",
  1189.         (sizeof(CcKeyMap) / sizeof(KEYCMD)));
  1190.  
  1191.     if ((sizeof(CcAltMap)) != c1)
  1192.     xprintf("CcAltMap should be 256 entries, but is %d.\r\n",
  1193.         (sizeof(CcAltMap) / sizeof(KEYCMD)));
  1194.  
  1195.     if ((sizeof(CcEmacsMap)) != c1)
  1196.     xprintf("CcEmacsMap should be 256 entries, but is %d.\r\n",
  1197.         (sizeof(CcEmacsMap) / sizeof(KEYCMD)));
  1198.  
  1199.     if ((sizeof(CcViMap)) != c1)
  1200.     xprintf("CcViMap should be 256 entries, but is %d.\r\n",
  1201.         (sizeof(CcViMap) / sizeof(KEYCMD)));
  1202.  
  1203.     if ((sizeof(CcViCmdMap)) != c1)
  1204.     xprintf("CcViCmdMap should be 256 entries, but is %d.\r\n",
  1205.         (sizeof(CcViCmdMap) / sizeof(KEYCMD)));
  1206. }
  1207.  
  1208. #endif
  1209.  
  1210. bool    MapsAreInited = 0;
  1211. bool    NLSMapsAreInited = 0;
  1212. bool    NoNLSRebind;
  1213.  
  1214. void
  1215. ed_InitNLSMaps()
  1216. {
  1217.     register int i;
  1218.  
  1219.     if (AsciiOnly)
  1220.     return;
  1221.     if (NoNLSRebind)
  1222.     return;
  1223.     for (i = 0200; i <= 0377; i++) {
  1224.     if (Isprint(i)) {
  1225.         CcKeyMap[i] = F_INSERT;
  1226.     }
  1227.     }
  1228.     NLSMapsAreInited = 1;
  1229. }
  1230.  
  1231. static void
  1232. ed_InitMetaBindings()
  1233. {
  1234.     Char    buf[3];
  1235.     register int i;
  1236.     KEYCMD *map;
  1237.  
  1238.     map = CcKeyMap;
  1239.     for (i = 0; i <= 0377 && CcKeyMap[i] != F_METANEXT; i++);
  1240.     if (i > 0377) {
  1241.     for (i = 0; i <= 0377 && CcAltMap[i] != F_METANEXT; i++);
  1242.     if (i > 0377) {
  1243.         i = 033;
  1244.         if (VImode)
  1245.         map = CcAltMap;
  1246.     }
  1247.     else {
  1248.         map = CcAltMap;
  1249.     }
  1250.     }
  1251.     buf[0] = i;
  1252.     buf[2] = 0;
  1253.     for (i = 0200; i <= 0377; i++) {
  1254.     if (map[i] != F_INSERT && map[i] != F_UNASSIGNED && map[i] != F_XKEY) {
  1255.         buf[1] = i & ASCII;
  1256.         AddXkeyCmd(buf, (Char) map[i]);
  1257.     }
  1258.     }
  1259.     map[buf[0]] = F_XKEY;
  1260. }
  1261.  
  1262. void
  1263. ed_InitVIMaps()
  1264. {
  1265.     register int i;
  1266.  
  1267.     VImode = 1;
  1268.     (void) ResetXmap(VImode);
  1269.     for (i = 0; i < 256; i++) {
  1270.     CcKeyMap[i] = CcViMap[i];
  1271.     CcAltMap[i] = CcViCmdMap[i];
  1272.     }
  1273.     ed_InitMetaBindings();
  1274.     (void) ed_InitNLSMaps();
  1275.     BindArrowKeys();
  1276. }
  1277.  
  1278. void
  1279. ed_InitEmacsMaps()
  1280. {
  1281.     register int i;
  1282.     Char    buf[3];
  1283.  
  1284.     VImode = 0;
  1285.     (void) ResetXmap(VImode);
  1286.     for (i = 0; i < 256; i++) {
  1287.     CcKeyMap[i] = CcEmacsMap[i];
  1288.     CcAltMap[i] = F_UNASSIGNED;
  1289.     }
  1290.     ed_InitMetaBindings();
  1291.     (void) ed_InitNLSMaps();
  1292.     buf[0] = 030;
  1293.     buf[2] = 0;
  1294.     buf[1] = 030;
  1295.     AddXkeyCmd(buf, F_EXCHANGE_MARK);
  1296.     buf[1] = '*';
  1297.     AddXkeyCmd(buf, F_EXPAND_GLOB);
  1298.     buf[1] = '$';
  1299.     AddXkeyCmd(buf, F_EXPAND_VARS);
  1300.     buf[1] = 'G';
  1301.     AddXkeyCmd(buf, F_LIST_GLOB);
  1302.     buf[1] = 'g';
  1303.     AddXkeyCmd(buf, F_LIST_GLOB);
  1304.     BindArrowKeys();
  1305. }
  1306.  
  1307. void
  1308. ed_InitMaps()
  1309. {
  1310.     if (MapsAreInited)
  1311.     return;
  1312. #ifdef VIDEFAULT
  1313.     ed_InitVIMaps();
  1314. #else
  1315.     ed_InitEmacsMaps();
  1316. #endif
  1317.  
  1318.     MapsAreInited = 1;
  1319. }
  1320.